package test4

import (
	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"net/http"
)

var sugarLogger *zap.SugaredLogger


func InitLogger() {
	// 写入路径， 日志切割归档需要重写
	writeSyncer := getLogWriter()
	// 编码方式
	encoder := getEncoder()

	// 第二个参数是个接口类型 io.Writer() Sync()
	core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
	// 核心 , 第二个参数显示调用方信息
	logger := zap.New(core, zap.AddCaller())
	sugarLogger = logger.Sugar()
}

func getEncoder() zapcore.Encoder {
	// 修改默认的输出格式
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder // 人类可读友好时间格式
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder

	// 按照 json格式
	return zapcore.NewJSONEncoder(encoderConfig)
	// 普通
	//return zapcore.NewConsoleEncoder(zap.NewProductionEncoderConfig())


}

// 返回该接口类型实例
func getLogWriter() zapcore.WriteSyncer {
	// io.Writer()
	//os.Create是每次覆盖
	//file, _ := os.Create("test2.log")

	// 追加模式
	//file, _ := os.OpenFile("test3.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0744)
	// 如果没有实现 Sync 方法， 赋值给一个实现了 Sync方法的结构体类型实例
	//return zapcore.AddSync(file)

	lumberJackLogger := &lumberjack.Logger{
		Filename:   "test4.log",
		MaxSize:    1, // M
		MaxBackups: 5, // 备份数量
		MaxAge:     30, // 最大备份天数
		Compress:   false, // 是否压缩
	}
	return zapcore.AddSync(lumberJackLogger)
}

func simpleHttpGet(url string) {
	sugarLogger.Debugf("Trying to hit GET request for %s", url)
	resp, err := http.Get(url)
	if err != nil {
		sugarLogger.Errorf("Error fetching URL %s : Error = %s", url, err)
	} else {
		sugarLogger.Infof("Success! statusCode = %s for URL %s", resp.Status, url)
		resp.Body.Close()
	}
}

func Test1() {
	InitLogger()
	defer sugarLogger.Sync()
	for i := 0; i < 20000; i++ {
		println(i)
		sugarLogger.Debugf("这是个测试！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！")
		//simpleHttpGet("www.sogou.com")
		//simpleHttpGet("http://www.sougou.com")
	}
	//simpleHttpGet("www.sogou.com")
	//simpleHttpGet("http://www.sougou.com")
}
